package com.corpgovernment.organization.mapper;

import com.corpgovernment.organization.common.mybatis.TkMapper;
import com.corpgovernment.organization.dto.UserEmailDTO;
import com.corpgovernment.organization.entity.db.MbOrgEmployeeInfo;
import com.corpgovernment.organization.entity.db.MbOrgInfo;
import com.corpgovernment.organization.model.org.dto.OrgInfoAllDto;
import org.apache.ibatis.annotations.Param;
import org.springframework.stereotype.Repository;

import java.util.List;
import java.util.Set;

/**
 * MbOrgInfoMapper数据库操作接口类
 *
 * @author yujue.wang
 */
@Repository
public interface MbOrgInfoMapper extends TkMapper<MbOrgInfo> {
    List<String> selectRoleId(@Param("parentResourceId") String parentResourceId,
                              @Param("childrenResourceId") List<String> childrenResourceId,
                              @Param("havingCount") int havingCount, @Param("type") String type);
    /**
     * 穿透子公司(包括子公司)
     * @param parentOrgId
     * @return
     */
    List<MbOrgInfo> selectAllChildrenOrgIdsPenetration(@Param("parentOrgId") String parentOrgId);

    /**
     * 不穿透子公司(不包括子公司)
     * @param parentOrgId
     * @return
     */
    List<MbOrgInfo> selectAllChildrenOrgIds(@Param("parentOrgId") String parentOrgId);

//    /**
//     * 通过组织id查询组织信息(组织详情)
//     *
//     * @param orgId
//     * @return
//     */


    /**
     * 根据名称模糊查询有效组织
     *
     * @param keyWord
     * @return
     */
    List<MbOrgInfo> fuzzyByName(@Param("keyWord") String keyWord);

    /**
     * 根据名称类型模糊查询组织
     *
     * @param name
     * @param orgType
     * @param valid
     * @return
     */
    List<MbOrgInfo> fuzzyByNameAndType(@Param("name") String name, @Param("orgType") String orgType,
            @Param("valid") String valid);

    /**
     * 查询所有前端组织架构
     *
     * @return
     */
    List<MbOrgInfo> listAll();

    /**
     * 查询所有前端组织架构  包含已删除的
     *
     * @return
     */
    List<MbOrgInfo> listAllWithDeleted();

    /**
     * 批量查询组织架构
     *
     * @param orgIds 组织架构ids
     * @return MbOrgInfo列表
     */
    List<MbOrgInfo> listByOrgIds(@Param("orgIds") List<String> orgIds);


    /**
     * 批量查询组织架构
     *
     * @param businessCodes 组织架构ids
     * @return MbOrgInfo列表
     */
    List<MbOrgInfo> listCompanyByBusinessCodes(@Param("businessCodes") List<String> businessCodes);

    /**
     * 批量查询前台组织架构
     *
     * @param orgIds
     * @return
     */
    List<MbOrgInfo> listByOrgIdsWithoutBackground(@Param("orgIds") List<String> orgIds);

    /**
     * 批量查询前台组织架构包括删除的组织
     * @param orgIds
     * @return
     */
    List<MbOrgInfo> listAllByOrgIds(@Param("orgIds") List<String> orgIds);

    /**
     * 批量查询前台组织架构
     *
     * @param ids
     * @return
     */
    List<MbOrgInfo> listByIdsWithoutBackground(@Param("ids") List<String> ids);

    /**
     * 查询所有公司
     *
     * @return
     */
    List<MbOrgInfo> listAllCompany(@Param("startPos") Integer startPos, @Param("offset") Integer offset);

    /**
     * 查询所有公司（包含删除）
     *
     * @return
     */
    List<MbOrgInfo> listAllCompanyWithDeleted(@Param("startPos") Integer startPos, @Param("offset") Integer offset);

    /**
     * 批量更新组织结构有效性
     *
     * @param orgIds
     * @param valid
     * @return
     */
    int batchUpdateOrgValid(@Param("orgIds") List<String> orgIds, @Param("valid") String valid);

    /**
     * 修改组织架构的支付方式
     *
     * @param orgIds
     * @param openStatus
     * @return
     */
    int batchUpdateOpenUnitePayment(@Param("orgIds") List<String> orgIds, @Param("openStatus") boolean openStatus);

    /**
     * 跟新父级id和level
     *
     * @return
     */
    int updateLevelAndParentIdByOrgId(@Param("orgId") String orgId, @Param("level") Integer level,
            @Param("parentId") String parentId);

    /**
     * 删除组织结构
     *
     * @param orgId 组织结构id
     * @return 影响行数
     */
    int deleteByOrgId(String orgId);

    /**
     * 查询所有组织
     * @param orgType
     * @return
     */
    List<MbOrgInfo> listAllByOrgType(@Param("orgType") String orgType);

    /**
     * 获取所有有效的组织id
     * @return
     */
    List<String> selectAllValidOrgId();

    List<MbOrgInfo> getOrgByOrgIdAndCompanyName(@Param("orgIds") List<String> orgIds);

    int insertMbOrgInfo(MbOrgInfo mbOrgInfo);

    List<UserEmailDTO> findUserInfoByOrgIds(@Param("orgIds") List<String> orgIds);

    Long selectOrgCount();

    List<MbOrgInfo> selectOrgByParentId(@Param("orgId") String orgId);

    List<MbOrgInfo> selectOrgByParentIdList(@Param("orgIdList") List<String> orgIdList);

    List<MbOrgInfo> listByBusinessCodeWithoutBackground(@Param("businessCodes") List<String> businessCode);

    MbOrgInfo selectOneByOrgId(@Param("orgId") String orgId);

    List<MbOrgInfo> selectByOrgIds(@Param("orgIds") List<String> orgIds);

    int updateParentBusinessCode(@Param("businessCode") String businessCode,
            @Param("newBusinessCode") String newBusinessCode);

    int deleteByOrgIds(@Param("orgIds") List<String> orgIds);

    int batchUpdate(@Param("mbOrgInfoList") List<MbOrgInfo> mbOrgInfoList);

    List<OrgInfoAllDto> getOrgAllSomeParams();

    List<MbOrgEmployeeInfo> findUidByOrgId(@Param("orgIds") List<String> orgIds);

    List<MbOrgInfo> selectOrgInfoByOrgTypeAndOrgId(@Param("orgIdList") Set<String> orgIdList , @Param("orgType") String orgType);

}